package Terminal.Entity.Dominio;

import java.util.ArrayList;


/**
 * Rappresenta la strategia di scelta delle regole.
 * Viene implementata tramite l'utilizzo del pattern GoF Composite. 
 * In tal modo si modella una regola per gestire altre regole.
 * 
 * @author Gruppo 6
 */
public abstract class ECalcoloStrategy {

	protected ArrayList<ERegola> regole = new ArrayList<ERegola>();
	
	public ArrayList<ERegola> getRegole() {
		return regole;
	}
	public void setRegole(ArrayList<ERegola> regole) {
		this.regole = regole;
	}		
	
	/**
	 * Aggiunge una nuova regola da gestire
	 * @param regola
	 * @return
	 */
	public boolean addRegola(ERegola regola)
	{
		return regole.add(regola);
	}
	/**
	 * Rimuove una regola dalla gestione
	 * @param regola
	 * @return
	 */	
	public boolean removeRegola(ERegola regola)
	{
		return regole.remove(regola);
	}
	
	/**
	 * Definisce la politica per la gestione delle regole
	 * @Override
	 */
	public abstract EMoney applicaPolitica(EFattura fattura);
	/**
	 * Converte una regola in un elemento (linea) di fattura.
	 * @Override
	 */
	public abstract ELineaRegola toELineaRegola();

}
